<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
    class Tool {
        /**
         * 格式化数字
         * @param {string|number} number 待处理数字
         * @param {number} places 小数点位数 -1为原样保留
         * @param {string} thousand 千位字符串 默认为空
         * @param {string} decimal 小数点替换字符 默认为.
         * @return {string|number}
         */
        static formatNumber(number = 0, places = -1, thousand = '', decimal = '.') {
            // 只处理正常数字
            if (typeof number !== 'string' && typeof number !== 'number') {
                number = 0;
            }
            // 得到正常的数字
            number = isNaN(parseFloat(number)) ? 0 : number;
            const numSplit = number.toString().split('.');
            // 为-1时为保留当前数字的自带有效位数
            places = !isNaN(Math.abs(parseInt(places))) && parseInt(places) !== -1 ? Math.abs(parseInt(places)) : -1;
            // 保留原有小数点位数
            if (numSplit[1] && places === -1) {
                places = numSplit[1].length;
            } else if (!numSplit[1] && places === -1) {
                places = 0;
            }
            // 千位标记
            thousand = typeof thousand == 'string' ? thousand : ',';
            // 小数点标记
            decimal = decimal || '.';
            // 符号
            let negative = number < 0 ? '-' : '';
            let i, j;
            // 10进制
            i = parseInt((number = Math.abs(+number || 0).toFixed(places)), 10).toString();
            j = (j = i.length) > 3 ? j % 3 : 0;
            // 处理后数据
            return (negative + (j ? i.substr(0, j) + thousand : '') + i.substr(j).replace(/(\d{3})(?=\d)/g,
                '$1' + thousand) + (places ? decimal + Math.abs(number - i).toFixed(places).slice(2) : ''));
        }
    }

    console.log(Tool.formatNumber(1.736, 2));
</script>
</body>
</html>
